/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tutor;

import ejb.GestoreArticoloLocal;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import jpa.PubblicazioneTemp;

/**
 *
 * @author Administrator
 */
@ManagedBean(name = "GestioneArticoli")
@SessionScoped
public class GestioneArticoli {

    @EJB
    GestoreArticoloLocal ga;

    private String titolo;
    private String nomeCorso; //creare un metodo nel ejb che ottiente il nome del corso dall id del corso
    private List<Integer> articoli;
    private int cor;
    private int start;
    private int end;
    private boolean next;
    private boolean pre;
    private PubblicazioneTemp pt;
    private String articolo;
    private String message;
    private String msg;

    /**
     * Creates a new instance of GestioneArticoli
     */
    public GestioneArticoli() {
        start = 0;
        end = 20;
        cor = 0;
        pre = false;
        next = false;

    }

    public String getMessage() {
        update();
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMsg() {
        return msg;
    }

    public void next() {

        cor++;
        if (cor == end) {
            start += cor;
            end += cor;
            cor = 0;
            articoli = ga.articoliDaApprovare(start, end);
        }
        if (articoli.isEmpty()) {
            cor = 0;
            return;
        }

        update();

    }

    public void pre() {
        if (cor <= 0) {
            cor = 0;
            return;
        }
        if (cor == 0 && start > 0) {
            int c = end - start;
            start -= c;
            end -= c;
            cor = c;
            articoli = ga.articoliDaApprovare(start, end);

        }

        if (articoli.isEmpty()) {
            cor = 0;
            return;
        }
        if (cor == 0 && start == 0) {
            return;
        }
        cor--;
        update();

    }

    public String getTitolo() {
        return titolo;
    }

    public void setTitolo(String titolo) {
        update();
        this.titolo = titolo;
    }

    public String getNomeCorso() {
        return nomeCorso;
    }

    public void setNomeCorso(String nomeCorso) {
        this.nomeCorso = nomeCorso;
    }

    public String getArticolo() {
        return articolo;
    }

    public void setArticolo(String articolo) {
        this.articolo = articolo;
    }

    public boolean isNext() {
        return next;
    }

    public void setNext(boolean next) {
        this.next = next;
    }

    public boolean isPre() {
        return pre;
    }

    public void setPre(boolean pre) {
        this.pre = pre;
    }

    public String riempiDB() {
        ga.riempiDB();
        update();
        return "dsdsd";
    }

    private void update() {
        articoli = ga.articoliDaApprovare(start, end);
        if (articoli.isEmpty()) {
            message = "Non sono presenti articoli da approvare nel DB";
            articolo = "";
            titolo = "";
            nomeCorso = "";
            return;
        }
        if (cor < 0 || cor >= articoli.size()) {
            cor = 0;
            return;
        }
        message = "";
        pt = ga.articoloDaApprovare(articoli.get(cor));
        titolo = pt.getTitolo();
        int idCorso = pt.getCorsoid();
        nomeCorso = ga.corsoAppartenenza(idCorso);
        StringBuilder sb = new StringBuilder();
        try {
            BufferedReader br = null;
            br = new BufferedReader(new FileReader(pt.getLink()));
            while (true) {
                String l = br.readLine();
                if (l == null) {
                    break;
                }
                sb.append(l);
            }
            br.close();
        } catch (Exception ex) {
            articolo = "<h3> Errore durante l'apertura dell'articolo </h3>";
        }
        articolo = sb.toString();
    }

    public String approva() {
        return "confermaA";
    }

    public String approvaConf() {
        PrintWriter pw = null;
        try {
            pw = new PrintWriter(new FileWriter(pt.getLink()));
            pw.println(articolo);
        } catch (IOException ex) {
            msg = "Si è verificato un errore durante la pubblicazione";
            return "message";
        } finally {
            pw.close();
        }

        FacesContext context = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
        String id = session.getAttribute("id").toString();

        int idTutor = Integer.parseInt(id);
        ga.approvaArticolo(pt.getId(), idTutor);
        msg = "Articolo " + titolo + " approvato";
        articoli = ga.articoliDaApprovare(start, end);
        next();
        return "message";
    }

    public String elimina() {
        return "confermaE";
    }

    public String eliminaConf() {
        ga.eliminaArticoloApprovare(pt.getId());
        msg = "Articolo " + titolo + " eliminato";
        articoli = ga.articoliDaApprovare(start, end);
        next();
        update();
        return "message";
    }

    public boolean isArticoliDaApprovare() {
        articoli = ga.articoliDaApprovare(start, 2);
        return articoli != null && articoli.size() > 0;
    }
}
